/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package simulado;

import java.text.DecimalFormat;
import java.util.List;
import javax.swing.JOptionPane;

/**
 *
 * @author Gustavo
 */
public class ControleUser {

    List<User> users;
    List<Vendedor> vendedores;
    User userlogado;
    SimulaBancoDeDados sBD = new SimulaBancoDeDados();
    int contSalvaVenda = 6;
    int contSalvaUser = 8;

    public String carregarUser(String nome, String senha, int iniciaListaDefault) {

        if (iniciaListaDefault == 1) {
            users = sBD.listDefaultUser();
            vendedores = sBD.listaDeVenasDefault();
        }
        String msn = null;
        boolean inicia = true;

        for (User user : users) {
            if (user.getNome().equalsIgnoreCase(nome) && user.getSenha().equalsIgnoreCase(senha)) {
                if (user.getPerfil().getId() == 1) {
                    while (inicia != false) {
                        String opcao = JOptionPane.showInputDialog("Cadastrar novo usuario[1], Excluir Usuario[2] Listar[3]");
                        if (opcao.equalsIgnoreCase("1")) {
                            salvarUser();
                        } else if (opcao.equalsIgnoreCase("2")) {
                            excluirUser();
                        } else {
                            listarUser();
                        }
                        String opc = JOptionPane.showInputDialog("Sair do perfil admin [Sim] [Não]");
                        if (opc.equalsIgnoreCase("sim")) {
                            inicia = false;
                            msn = "Você saiu do perfil ADMIN";
                            return msn;
                        }
                    }
                }
                if (user.getPerfil().getId() == 2) {
                    while (inicia != false) {
                        String opcao = JOptionPane.showInputDialog("Verificar o Relatorio de custos de um vendedor[1] \nVerificar o relatorio de custos total[2] \nCadastro de salario horas trabalhas e valor de vendas[3]");
                        if (opcao.equalsIgnoreCase("1")) {
                            verificarRelatorioDeCustaDoVendedor();
                        } else if (opcao.equalsIgnoreCase("2")) {
                            verificarRelatorioDeCustoTotal();
                        } else {
                            cadadastraItensVendedor();
                        }
                        String opc = JOptionPane.showInputDialog("Sair do perfil Gerente [Sim] [Não]");
                        if (opc.equalsIgnoreCase("sim")) {
                            inicia = false;
                            msn = "Você saiu do perfil GERENTE";
                            return msn;
                        }
                    }
                }
                if (user.getPerfil().getId() == 3) {
                    userlogado = new User();
                    userlogado.setId(user.getId());
                    userlogado.setNome(user.getNome());
                    while (inicia != false) {
                        String opcao = JOptionPane.showInputDialog(" Olá :" + userlogado.getNome() + "\n"
                                + " Vereficar folha salarial vendedor[1] \n"
                                + " Verificar comessão[2] ");
                        if (opcao.equalsIgnoreCase("1")) {
                            verificaFolhaSalarial();
                        } else {
                            verificaComissao();
                        }
                        String opc = JOptionPane.showInputDialog("Sair do perfil Vendedor [Sim] [Não]");
                        if (opc.equalsIgnoreCase("sim")) {
                            inicia = false;
                            msn = "Você saiu do perfil VENDEDOR";
                            return msn;
                        }
                    }
                }
            }
        }
        msn = "Usuario não encontrado";
        return msn;

    }

    public void salvarUser() {
        List<Perfil> perfis = sBD.carregaPerfil();
        User u;
        int opcao = Integer.parseInt(JOptionPane.showInputDialog("Digite [2]GERENTE, [3]VENDEDOR"));

        String nome = null;
        for (Perfil perfi : perfis) {
            int num = perfi.getId();
            if (num == opcao) {
                if (opcao == 2) {
                    nome = JOptionPane.showInputDialog("Digite o nome do Gerente");
                } else if (opcao == 3) {
                    nome = JOptionPane.showInputDialog("Digite o nome do vendedor");
                }
                String senha = JOptionPane.showInputDialog("Digite a senha");

                u = new User();
                u.setId(contSalvaUser);
                u.setNome(nome);
                u.setSenha(senha);
                u.setPerfil(perfi);
                users.add(u);
                contSalvaUser++;
            }
        }
    }

    public void excluirUser() {
        for (User user : users) {
            System.out.println(" ID " + user.getId());
            System.out.println(" NOME " + user.getNome());
            System.out.println(" PERFIL " + user.getPerfil().getNome());
            System.out.println("===========================");
        }
        int id = Integer.parseInt(JOptionPane.showInputDialog("Informe o ID so funcionario a ser excluido"));
        for (User user : users) {
            if (user.getId() == id) {
                users.remove(user);
                break;
            }
        }
        for (User user2 : users) {
            System.out.println(" ID " + user2.getId());
            System.out.println(" NOME " + user2.getNome());
            System.out.println(" PERFIL " + user2.getPerfil().getNome());
            System.out.println("===========================");
        }
    }

    public void listarUser() {
        for (User user : users) {
            System.out.println(" ID " + user.getId());
            System.out.println(" NOME " + user.getNome());
            System.out.println(" SENHA " + user.getSenha());
            System.out.println(" PERFIL " + user.getPerfil().getNome());
            System.out.println("===========================");
        }
    }

    public void cadadastraItensVendedor() {
        User use = new User();
        Vendedor v = new Vendedor();

        for (User user : users) {
            int num = user.getPerfil().getId();
            if (num == 3) {
                System.out.println(" ID " + user.getId());
                System.out.println(" NOME " + user.getNome());
                System.out.println(" PERFIL " + user.getPerfil().getNome());
                System.out.println("===========================");
            }
        }
        int vend = Integer.parseInt(JOptionPane.showInputDialog("Escolha o ID do vendedor para cadastrar seus dados"));
        for (User u : users) {
            if (u.getId() == vend) {
                use.setId(u.getId());
                use.setNome(u.getNome());
                use.setPerfil(u.getPerfil());
                use.setSenha(u.getSenha());
            }
        }
        double salario = Double.parseDouble(JOptionPane.showInputDialog("Informe o salario do vendedor " + use.getNome()));
        int horat = Integer.parseInt(JOptionPane.showInputDialog("Informe a hora trabalhada "));
        double valorVendas = Double.parseDouble(JOptionPane.showInputDialog("Iforme o valor das vendas"));
        v.setId(contSalvaVenda);
        v.setSalario(salario);
        v.setValorVenda(valorVendas);
        v.setCargaHoraria(horat);
        v.setUser(use);
        vendedores.add(v);
        contSalvaVenda++;
    }

    public void verificarRelatorioDeCustaDoVendedor() {
        double salariob = 0;
        double encargo = 0;
        double total = 0;
        for (Vendedor vend : vendedores) {
            System.out.println(" ID " + vend.getId());
            System.out.println(" NOME " + vend.getUser().getNome());
            System.out.println("=================");
        }
        int opcao = Integer.parseInt(JOptionPane.showInputDialog("Escolha o ID do vendedor para obter o relatorio"));

        for (Vendedor v : vendedores) {
            int num = v.getId();
            if (num == opcao) {
                salariob = v.getSalario();
                encargo = salariob * 0.90;
                total = encargo + salariob;
            }
        }
        JOptionPane.showMessageDialog(null, "VERIFICAR O RELATÓRIO DE CUSTOS DE UM VENDEDOR \n Salario bruto R$" + salariob + "\n Encargos R$" + encargo + "\n Total R$" + total);
    }

    public void verificarRelatorioDeCustoTotal() {
        double total;
        double salariob = 0;
        double encargo = 0;
        for (Vendedor vendedor : vendedores) {
            salariob = salariob + vendedor.getSalario();
            encargo = encargo + (vendedor.getSalario() * 0.90);
        }
        total = salariob + encargo;
        JOptionPane.showMessageDialog(null, "Valor total dos salarios R$" + salariob + "\n"
                + "valor total dos encargos R$" + encargo + "\n"
                + "Salario bruto - Encargos R$" + total);
    }

    public void verificaFolhaSalarial() {
        Calculos calc = new Calculos();
        double salarioBase = 0;
        double salarioInss;
        double salarioLiquido;
        int horat = 0;
        double valorVenda = 0;
        double ir;
        double comissao;
        String msn = null;
        double inss;
        DecimalFormat df = new DecimalFormat("0.00");
        for (Vendedor vend : vendedores) {
            if (vend.getUser().getId() == userlogado.getId()) {
                salarioBase = vend.getSalario();
                horat = vend.getCargaHoraria();
                valorVenda = vend.getValorVenda();
            }
        }
        salarioBase = calc.calculaHorasTrabalhadas(salarioBase, horat);
        inss = calc.inss(salarioBase);
        salarioInss = salarioBase - inss;
        ir = calc.impostoDeRenda(salarioBase);
        salarioLiquido = salarioInss - ir;
        comissao = calc.calculaComissao(salarioLiquido, valorVenda);
        JOptionPane.showMessageDialog(null, " NOME DO VENDEDOR :" + userlogado.getNome() + "\n Horas trabalhadas :" + horat + "Hs\n SALARIO BASE R$" + df.format(salarioBase) + "\n INSS R$" + df.format(inss) + "\n IR R$" + df.format(ir) + "\n VALOR DAS VENDAS R$" + df.format(valorVenda) + "\n COMISSÃO R$" + df.format(comissao) + "\n SALARIO LIQUIDO R$" + df.format(salarioLiquido));
    }

    public void verificaComissao() {
        DecimalFormat df = new DecimalFormat("0.00");
        Calculos calc = new Calculos();
        double salarioBase = 0;
        double salarioInss;
        double salarioLiquido;
        double ir;
        double inss;
        int horat = 0;
        double valorVenda = 0;
        double comissao;
        for (Vendedor vend : vendedores) {
            if (vend.getUser().getId() == userlogado.getId()) {
                salarioBase = vend.getSalario();
                horat = vend.getCargaHoraria();
                valorVenda = vend.getValorVenda();
            }
        }
        salarioBase = calc.calculaHorasTrabalhadas(salarioBase, horat);
        inss = calc.inss(salarioBase);
        salarioInss = salarioBase - inss;
        ir = calc.impostoDeRenda(salarioBase);
        salarioLiquido = salarioInss - ir;
        comissao = calc.calculaComissao(salarioLiquido, valorVenda);
        JOptionPane.showMessageDialog(null, "TABLELA DE COMISSÃO\n Venda menor que R$2000,00 Comissão = 0\n"
                + "Venda menor que R$5000,00 Comissão 10% sobro o salario\n"
                + "Venda menor que R$7500,00 Comissão 15% sobre o salario\n"
                + "Venda acima de R$7500,01 Comissão 20% sobre o salario\n"
                + "VENDEDOR nome :" + userlogado.getNome() + "\n"
                + "Total de vendas R$" + valorVenda + "\nComessão R$" + df.format(comissao));
    }
}
